package com.hexinfo.dmpro.component.data.transfer.model;

import cn.hutool.core.util.StrUtil;
import lombok.Data;

@Data
public class DataImport {

    /**
     * 本地导入源的目录
     **/
    private String localDir;

    /**
     * 本地导入源的文件名
     **/
    private String localFileName;

    /**
     * HDFS带端口的URL
     **/
    private String hdfsUrls;

    /**
     * HDFS的目标目录
     **/
    private String hdfsDir;

    /**
     * HDFS的目标文件名
     **/
    private String hdfsFileName;

    /**
     * hive jdcb url 地址 例如：jdbc:hive2://127.0.0.1:10000
     **/
    private String hiveJdbcUrl;

    /**
     * hive 用户名
     **/
    private String hiveUserName;

    /**
     * hive 密码
     **/
    private String hivePassword;

    /**
     * 目标Hive指定的库名
     **/
    private String databaseName;

    /**
     * 目标Hive指定的表名
     **/
    private String tableName;

    /**
     * Hive的临时TXT表存放库名
     **/
    private String txtDatabaseName;

    /**
     * Hive的临时TXT表名
     **/
    private String txtTableName;

    /**
     * 导入方式(全量覆盖/增量插入)
     **/
    private String importType;

    /**
     * 导入的指定分区名
     **/
    private String partitionName;

    /**
     * 导入的指定分区值
     **/
    private String partitionValue;

    /**
     * 创建TXT文本表表语句
     **/
    private String createTxtTableSql;

    /**
     * 创建Parquet表表语句
     **/
    private String createTableSql;

    /**
     * 是否创建Parquet表：默认 N
     **/
    private String isCreateParquetTable = "N";

    /**
     * TXT文本表数据插入到Parquet表
     **/
    private String insertParquetTableSql;

    /**
     * 是否需要插入到Parquet目标表：默认 N
     **/
    private String isInsertParquetTable = "Y";

    public String getLocalPath() {
        return localDir + "/" + localFileName;
    }

    public String getHdfsPath() {
        return hdfsUrls + "/" + hdfsDir + "/" + hdfsFileName;
    }

    public String getIsOverwrite() {
        return importType.equals("TOTAL") ? "OVERWRITE" : "";
    }

    public String getTableFullName() {
        return databaseName + "." + tableName;
    }

    public String getTxtTableFullName() {
        return txtDatabaseName + "." + txtTableName;
    }

    public String getPartitionConfiguration() {
        return partitionName + "=" + partitionValue;
    }

    public String getTxtJdbcUrls() {
        return StrUtil.format("{}/{}", hiveJdbcUrl, getTxtDatabaseName());
    }

    public String getParquetJdbcUrls() {
        return StrUtil.format("{}/{}", hiveJdbcUrl, getDatabaseName());
    }
}
